Quality of Service (QoS) is the ability to provide differentiated service (e.g., different priorities, service levels) to different types of traffic. In some cases, QoS is used to guarantee a certain level of performance to the data flows. For example, QoS can be used to prioritize network traffic for different applications or to guarantee a minimum available throughput for a certain type of network traffic (e.g., streaming video). With larger adoption of private or public cloud, it is highly desirable to serve traffic from multiple applications on a single network fabric for cost reduction and simplified management.
More and more business critical applications are deployed within datacenter or clouds. With today's wide range of applications that can be deployed, the network flows for applications such as voice over IP (VoIP) and streaming video content have converged. This calls for reliable QoS from the underlying network. Applications and machines can be rapidly spawned in virtualized environments, making it difficult to satisfy complex QoS requirements. Various elements of the network (e.g., application workloads, group membership, etc.) can change dynamically, altering the QoS requirements for various points in the network.
However, as the number of network elements (e.g., switches, routers, logical/physical ports) to be managed increases, it becomes increasingly difficult to scale deployment of QoS through the network. For example, datacenters can have thousands of VMs or virtual applications for various users and/or tenants that may be distributed over multiple machines in several different geographic regions. It is not trivial to provide consistent and accurate QoS in such environments for the various users and/or tenants.
Some market routers/switches attempt to provide dynamic QoS for networks, but often require manual configurations to implement a QoS policy in the network. Manually configuring resource pools, traffic filtering, and marking policies over such large number of VMs is a daunting task that requires significant resources and can lead to many difficulties in diagnosing issues throughout the network. Manual configurations can also result in unnecessary reservations of bandwidth, leading to an over-provisioned and inefficient network. In addition, such methods for deploying QoS is static and are unable to adjust to the frequent changes increasingly seen in today's networks. It is difficult to deploy and maintain dynamic, context-aware QoS in large, distributed environments.